package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * ListFiles(接口：Filter)    重载
 * 作用：按照“指定规则”获取对应文件/文件夹
 * Filter接口---专门给ListFiles方法提供：过滤文件夹或者文件【指定规则】
 * accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 *
 * 需求：获取API项目下的所有子项【文件和文件夹】，获取src文件
 *      指定规则：验证是s开头就是src
 *      作业2：FileFilter按照 匿名内部类 方式 实现 功能如上需求
 *      接口 FileFilter ff=new FileFilter(){accept()}
 */
public class FilterAPI {
    //主方法：./ 路径指定根级
    public static void main(String[] args) throws IOException {
        //1.创建File文件类：获取当前API文件夹
        File file=new File("."+File.separator+"API");
        System.out.println(file.getCanonicalPath());
        //4.匿名内部类：替换子类继承FileFilter
     /*   FileFilter my=new FileFilter() {
            public boolean accept(File pathname) {
                String name= pathname.getName();
                System.out.println("过滤出来的文件夹名字是："+name);
                return name.startsWith("s");
            }
            FileFilter my=(pathname)->{return  pathname.getName().startsWith("s");};
        };*/
        //2.获取文件夹下所有“子项”：文件夹下包括所有文件和“文件夹”
        //打印子项下所有名字
       /* for(int i=0;i<subs.length;i++){//i 下标 从0开始
            System.out.println("所有文件和文件夹名："+subs[i].getName());
        }*/
        //增强for for(接受类型 f:){}
        for(File f:new File("."+File.separator+"API").listFiles((pathname)->{return pathname.getName().startsWith("s");})){
            System.out.println("遍历后过滤完成："+f);
        }
    }
    //单元测试：./路径指定父级

  /*  @Test
    public void test01() throws IOException {
            //创建File文件类：获取当前API文件夹
            File file=new File("."+File.separator);
            System.out.println(file.getCanonicalPath());
    }*/
}
//创建实现类--实现--Filter接口--对象创建
class MyFilter implements FileFilter{
    //传入参数：File pathname--获取所有需要过滤文件
    //添加一个过滤条件，将获取所有过滤文件
    //逐一过滤，【条件：规则--开发者指定】条件
    //满足返回true，输出，条件不满足反之
    public boolean accept(File pathname) {
        //添加规则：文件或者文件夹是s开头---过滤
        //①获取所有文件夹名字
        String name=pathname.getName();
        //②过滤以 s开头的文件夹
        //字符串：startsWith("s")返回值 boolean
        //作用：验证字符串首字符是不是匹配字符，如果匹配：true，反之不匹配
        //③打印过滤出现字符串
        System.out.println("过滤出来文件夹名字是："+name);
        return name.startsWith("s");
    }
}
